package com.youlu.campus.web.ca.service;

import com.youlu.campus.entity.OrderInfo;
import com.youlu.campus.entity.UserCaInfo;
import com.youlu.campus.entity.UserPO;
import com.youlu.campus.entity.VO.req.*;
import com.youlu.campus.entity.card.vo.VipRedeemCodeVo;
import com.youlu.campus.entity.domain.ActivityRewadDomain;
import com.youlu.campus.web.ca.dto.MyCaInfoDTO;
import org.springframework.data.domain.Page;

import java.util.Map;

public interface UserCaInfoService {
    /**
     * 我的证书列表
     *
     * @param req
     * @return
     */
    Page<UserCaInfo> list(UserCaInfoQueryVO req);

    /**
     * 领取证书
     *
     * @param req
     * @return
     */
    UserCaInfo receiveCa(ReceiveCaVO req);

    /**
     * 获取证书详情
     *
     * @param id
     * @return
     */
    UserCaInfo getCaDetail(String id, String userId);

    /**
     * 下单
     *
     * @param req
     * @return
     */
    Map<String, String> placeOrder(UserCaInfo req);

    /**
     * 支付回调
     *
     * @param userId
     * @param orderNo
     * @return
     */
    boolean payCallBack(String userId, String orderNo);

    /**
     * 领取奖励下单
     *
     * @param req
     * @return
     */
    Map<String, String> placeOrder(ActivityRewadDomain req);

    /**
     * 支付订单
     *
     * @param req
     * @return
     */
    Map<String, String> payOrder(ActivityRewadDomain req, UserPO userPO);

    /**
     * 用户证书查询
     *
     * @param myCaInfoVO
     * @return
     */
    MyCaInfoDTO queryMyCaInfo(MyCaInfoVO myCaInfoVO);

    /**
     * 用户下单
     *
     * @param req
     * @param userPO
     * @return
     */
    OrderInfo placeOrder(PlaceOrderVO req, UserPO userPO);
    /**
     * 用户下单V2
     *
     * @param req
     * @param userPO
     * @return
     */
    OrderInfo placeOrderV2(PlaceOrderV2VO req, UserPO userPO);
    /**
     * 获取证书订单
     *
     * @param orderNo
     * @param userId
     * @return
     */
    OrderInfo getOrderDetail(String orderNo, String userId,String platForm);

    /**
     * 获取兑换码
     *
     * @param subOrderNo
     * @return
     */
    VipRedeemCodeVo getRedeemCode(String subOrderNo, String userId, boolean isMobileLogin);

    /**
     * 获取证书状态
     *
     * @param orderNo
     * @return
     */
    String getOrderStatus(String orderNo);

    /**
     * 获取订单列表
     *
     * @param req
     * @return
     */
    Page<OrderInfo> getOrderInfos(OrderInfoQueryVO req);


    Integer checkItemStock(ItemCheckStockReq req);

}
